 
/**
* jjy-share-v2.0
* 作者：极纪元-橙
* 作者博客：https://cplvfx.blog.csdn.net/
* 码云Gitee：https://gitee.com/cplvfx/
*/
 
function jjyShare(jjyShareConfig) {
    //console.log('jjy-shareV1.1一键分享到微博、QQ空间、QQ好友、微信');
    if (typeof (jjyShareConfig) === 'object') {
        var jjy_share_Dom = document.querySelector("#jjy-share");
        if (jjy_share_Dom) {
            //console.log('进行监听');

            //基础参数初始化
            var config = jjyShareConfig;
            {
                config.url = window.location.href;//当前页面URL
                config.sourceUrl = window.location.protocol + '//' + window.location.host;//站点首页URL
                if (!(typeof (config.weiboUserId) === 'number')) {
                    config.weiboUserId = 0;//微博平台账号ID
                }
                if (!config.sourceName) {
                    config.sourceName = '';//来源站点名称
                }
                if (!config.title) {
                    config.title = document.title;//当前页面标题 
                }
                if (!config.des) {
                    config.des = config.title;//页面描述
                }
                if (!config.imgagesUrl) {
                    config.imgagesUrl = '';//分享的图片
                }
                //判断是否移动端
                if ((navigator.userAgent.match(/(iPhone|iPod|Android|ios|iPad)/i))) {
                    config.IsMobile=true;
                }
                else{
                    config.IsMobile=false;
                }
            }
            //console.log('基础参数初始化===', config)
            //基础参数初始化 end

            //准备微信CSS
            {
                
                jjy_share_Dom.innerHTML+=(
                    '<style>'+
                    '.jjy_share_weixin_popup {'+
                    '       background: #fff none repeat scroll 0 0;'+
                    '       border: 1px solid #d8d8d8;'+
                    '       padding: 10px;'+
                    '       position: fixed;'+
                    '       z-index: 11001;'+
                    '       text-align: left;'+
                    '       font-size: 12px;'+
                    '       color: #333;'+
                    '   }'+
                    '#jjy_share_weixin_qrcode {'+
                    '    height: 295px;'+
                    '    left: 333.5px;'+
                    '    bottom: 40%;'+
                    '    width: 240px;'+
                    '}'+
                    '.jjy_share_weixin_popup .jjy_share_weixin_popup_head {'+
                    '    color: #000;'+
                    '    font-weight: bold;'+
                    '    height: 16px;'+
                    '    line-height: 16px;'+
                    '    position: relative;'+
                    '    text-align: left;'+
                    '}'+ 
                    '.jjy_share_weixin_popup .jjy_share_weixin_popup_head .jjy_share_weixin_popup_close {'+
                    '    color: #999;'+
                    '    font-size: 16px;'+
                    '    height: 16px;'+
                    '    position: absolute;'+
                    '    right: 0;'+
                    '    text-decoration: none;'+
                    '    top: 0;'+
                    '    width: 16px;'+
                    '} '+
                    '.jjy_share_weixin_popup .jjy_share_weixin_popup_main {'+
                    '    TEXT-ALIGN: center;'+
                    '    padding-top: 10px;'+
                    '    padding-bottom: 10px;'+
                    '}'+ 
                    '.jjy_share_weixin_popup .jjy_share_weixin_popup_foot {'+
                    '    color: #666;'+
                    '    line-height: 22px;'+
                    '    text-align: left;'+
                    '}'+
                    '</style>'
                );
            }

            //微信
            var jjy_share_weixin = document.querySelector('#jjy-share [data-jjyshare="weixin"]');
            if (jjy_share_weixin) {
                jjy_share_weixin.addEventListener("click", function (data1) {
                    console.log('你点击了weixin');
                    // console.log('this===', this);
                    // console.log('data1===', data1); 
                    //手机端、PC端适配
                    if(config.IsMobile)
                    { 
                        console.log('微信分享在手机端应该弹一张图片');
                        alert('点击右上角的“...”进行分享')
                    }else{
                        showWeixin();
                    }
                });
            }
            //微博
            var jjy_share_weibo = document.querySelector('#jjy-share [data-jjyshare="weibo"]');
            if (jjy_share_weibo) {
                jjy_share_weibo.addEventListener("click", function (data1) {
                    // console.log('你点击了weibo');
                    // console.log('this===', this);
                    // console.log('this.dataset===', this.dataset);
                    // console.log('data1===', data1); 
                    var _url = 'http://service.weibo.com/share/share.php?url=' + encodeURIComponent(config.url) +
                        '&title=' + encodeURIComponent(config.title) +
                        '&sourceUrl=' + encodeURIComponent(config.sourceUrl) + '&content=gb2312';
                    if (config.weiboUserId > 0) {
                        _url += '&ralateUid=' + config.weiboUserId;
                    }
                    if (config.sourceName) {
                        _url += '&source=' + config.sourceName;
                    }
                    if (config.imgagesUrl) {
                        _url += '&pic=' + encodeURIComponent(config.imgagesUrl);
                    }
                    console.log(_url)

                    //手机端、PC端适配
                    if(config.IsMobile)
                    {
                        window.location.assign(_url);
                    }else{
                        window.open(_url, 'xmOpenWindow', 'width=750,height=600,menubar=0,scrollbars=1,resizable=1,status=1,titlebar=0,toolbar=0,location=1');
                    }
                });
            }
            //qq空间
            var jjy_share_qq_qzone = document.querySelector('#jjy-share [data-jjyshare="qq_qzone"]');
            if (jjy_share_qq_qzone) {
                jjy_share_qq_qzone.addEventListener("click", function (data1) {
                    // console.log('你点击了qq_qzone');
                    // console.log('this===', this);
                    // console.log('data1===', data1);
                   var _url='http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url='+ encodeURIComponent(config.url) +
                   '&title='+ encodeURIComponent(config.title) +'&summary='+ encodeURIComponent(config.des);
                   if (config.imgagesUrl) {
                    _url += '&pics=' + encodeURIComponent(config.imgagesUrl);
                    }  

                    //手机端、PC端适配
                    if(config.IsMobile)
                    {
                        window.location.assign(_url);
                    }else{
                        window.open(_url, 'xmOpenWindow', 'width=750,height=600,menubar=0,scrollbars=1,resizable=1,status=1,titlebar=0,toolbar=0,location=1');
                    }
                });
            }
            //qq
            var jjy_share_qq = document.querySelector('#jjy-share [data-jjyshare="qq"]');
            if (jjy_share_qq) {
                jjy_share_qq.addEventListener("click", function (data1) {
                    // console.log('你点击了qq');
                    // console.log('this===', this);
                    // console.log('data1===', data1); 
                    var _url='https://connect.qq.com/widget/shareqq/index.html?url='+ encodeURIComponent(config.url) +
                    '&title='+ encodeURIComponent(config.title) +'&summary='+ encodeURIComponent(config.des); 
                   if (config.imgagesUrl) {
                    _url += '&pics=' + encodeURIComponent(config.imgagesUrl);
                    }

                    //手机端、PC端适配
                    if(config.IsMobile)
                    {
                        window.location.assign(_url);
                    }else{
                        window.open(_url, 'xmOpenWindow', 'width=750,height=600,menubar=0,scrollbars=1,resizable=1,status=1,titlebar=0,toolbar=0,location=1');
                    }
                    
                });
            }

            //link(复制链接)
            var jjy_share_link = document.querySelector('#jjy-share [data-jjyshare="copylink"]');
            if (jjy_share_link) {
                jjy_share_link.addEventListener("click", function (data1) {
                    console.log('你点击了link');
                    // console.log('this===', this);
                    // console.log('data1===', data1);
                    let copyInput = document.createElement('input');//创建input元素
                    document.body.appendChild(copyInput);//向页面底部追加输入框
                    copyInput.setAttribute('value', config.url);//添加属性，将url赋值给input元素的value属性
                    copyInput.select();//选择input元素
                    document.execCommand("Copy");//执行复制命令
                    alert("链接已复制！");//弹出提示信息，不同组件可能存在写法不同
                    //复制之后再删除元素，否则无法成功赋值
                    copyInput.remove();//删除动态创建的节点 
                });
            }


            //二维码生成器
            var qrcode = function () {
                var qrcode = function (typeNumber, errorCorrectLevel) {
                    var PAD0 = 0xEC;
                    var PAD1 = 0x11;
                    var _typeNumber = typeNumber;
                    var _errorCorrectLevel = QRErrorCorrectLevel[errorCorrectLevel];
                    var _modules = null;
                    var _moduleCount = 0;
                    var _dataCache = null;
                    var _dataList = new Array();
                    var _this = {};
                    var makeImpl = function (test, maskPattern) {
                        _moduleCount = _typeNumber * 4 + 17;
                        _modules = function (moduleCount) {
                            var modules = new Array(moduleCount);
                            for (var row = 0; row < moduleCount; row += 1) {
                                modules[row] = new Array(moduleCount);
                                for (var col = 0; col < moduleCount; col += 1) {
                                    modules[row][col] = null;
                                }
                            }
                            return modules;
                        }(_moduleCount);
            
                        setupPositionProbePattern(0, 0);
                        setupPositionProbePattern(_moduleCount - 7, 0);
                        setupPositionProbePattern(0, _moduleCount - 7);
                        setupPositionAdjustPattern();
                        setupTimingPattern();
                        setupTypeInfo(test, maskPattern);
            
                        if (_typeNumber >= 7) {
                            setupTypeNumber(test);
                        }
            
                        if (_dataCache == null) {
                            _dataCache = createData(_typeNumber, _errorCorrectLevel, _dataList);
                        }
            
                        mapData(_dataCache, maskPattern);
                    };
                    var setupPositionProbePattern = function (row, col) {
            
                        for (var r = -1; r <= 7; r += 1) {
            
                            if (row + r <= -1 || _moduleCount <= row + r) continue;
            
                            for (var c = -1; c <= 7; c += 1) {
            
                                if (col + c <= -1 || _moduleCount <= col + c) continue;
            
                                if ((0 <= r && r <= 6 && (c == 0 || c == 6))
                                    || (0 <= c && c <= 6 && (r == 0 || r == 6))
                                    || (2 <= r && r <= 4 && 2 <= c && c <= 4)) {
                                    _modules[row + r][col + c] = true;
                                } else {
                                    _modules[row + r][col + c] = false;
                                }
                            }
                        }
                    };
                    var getBestMaskPattern = function () {
            
                        var minLostPoint = 0;
                        var pattern = 0;
            
                        for (var i = 0; i < 8; i += 1) {
            
                            makeImpl(true, i);
            
                            var lostPoint = QRUtil.getLostPoint(_this);
            
                            if (i == 0 || minLostPoint > lostPoint) {
                                minLostPoint = lostPoint;
                                pattern = i;
                            }
                        }
            
                        return pattern;
                    };
                    var setupTimingPattern = function () {
            
                        for (var r = 8; r < _moduleCount - 8; r += 1) {
                            if (_modules[r][6] != null) {
                                continue;
                            }
                            _modules[r][6] = (r % 2 == 0);
                        }
            
                        for (var c = 8; c < _moduleCount - 8; c += 1) {
                            if (_modules[6][c] != null) {
                                continue;
                            }
                            _modules[6][c] = (c % 2 == 0);
                        }
                    };
                    var setupPositionAdjustPattern = function () {
            
                        var pos = QRUtil.getPatternPosition(_typeNumber);
            
                        for (var i = 0; i < pos.length; i += 1) {
            
                            for (var j = 0; j < pos.length; j += 1) {
            
                                var row = pos[i];
                                var col = pos[j];
            
                                if (_modules[row][col] != null) {
                                    continue;
                                }
            
                                for (var r = -2; r <= 2; r += 1) {
            
                                    for (var c = -2; c <= 2; c += 1) {
            
                                        if (r == -2 || r == 2 || c == -2 || c == 2
                                            || (r == 0 && c == 0)) {
                                            _modules[row + r][col + c] = true;
                                        } else {
                                            _modules[row + r][col + c] = false;
                                        }
                                    }
                                }
                            }
                        }
                    };
                    var setupTypeNumber = function (test) {
            
                        var bits = QRUtil.getBCHTypeNumber(_typeNumber);
            
                        for (var i = 0; i < 18; i += 1) {
                            var mod = (!test && ((bits >> i) & 1) == 1);
                            _modules[Math.floor(i / 3)][i % 3 + _moduleCount - 8 - 3] = mod;
                        }
            
                        for (var i = 0; i < 18; i += 1) {
                            var mod = (!test && ((bits >> i) & 1) == 1);
                            _modules[i % 3 + _moduleCount - 8 - 3][Math.floor(i / 3)] = mod;
                        }
                    };
                    var setupTypeInfo = function (test, maskPattern) {
            
                        var data = (_errorCorrectLevel << 3) | maskPattern;
                        var bits = QRUtil.getBCHTypeInfo(data);
            
                        // vertical
                        for (var i = 0; i < 15; i += 1) {
            
                            var mod = (!test && ((bits >> i) & 1) == 1);
            
                            if (i < 6) {
                                _modules[i][8] = mod;
                            } else if (i < 8) {
                                _modules[i + 1][8] = mod;
                            } else {
                                _modules[_moduleCount - 15 + i][8] = mod;
                            }
                        }
            
                        // horizontal
                        for (var i = 0; i < 15; i += 1) {
            
                            var mod = (!test && ((bits >> i) & 1) == 1);
            
                            if (i < 8) {
                                _modules[8][_moduleCount - i - 1] = mod;
                            } else if (i < 9) {
                                _modules[8][15 - i - 1 + 1] = mod;
                            } else {
                                _modules[8][15 - i - 1] = mod;
                            }
                        }
            
                        // fixed module
                        _modules[_moduleCount - 8][8] = (!test);
                    };
                    var mapData = function (data, maskPattern) {
            
                        var inc = -1;
                        var row = _moduleCount - 1;
                        var bitIndex = 7;
                        var byteIndex = 0;
                        var maskFunc = QRUtil.getMaskFunction(maskPattern);
            
                        for (var col = _moduleCount - 1; col > 0; col -= 2) {
            
                            if (col == 6) col -= 1;
            
                            while (true) {
            
                                for (var c = 0; c < 2; c += 1) {
            
                                    if (_modules[row][col - c] == null) {
            
                                        var dark = false;
            
                                        if (byteIndex < data.length) {
                                            dark = (((data[byteIndex] >>> bitIndex) & 1) == 1);
                                        }
            
                                        var mask = maskFunc(row, col - c);
            
                                        if (mask) {
                                            dark = !dark;
                                        }
            
                                        _modules[row][col - c] = dark;
                                        bitIndex -= 1;
            
                                        if (bitIndex == -1) {
                                            byteIndex += 1;
                                            bitIndex = 7;
                                        }
                                    }
                                }
            
                                row += inc;
            
                                if (row < 0 || _moduleCount <= row) {
                                    row -= inc;
                                    inc = -inc;
                                    break;
                                }
                            }
                        }
                    };
                    var createBytes = function (buffer, rsBlocks) {
            
                        var offset = 0;
            
                        var maxDcCount = 0;
                        var maxEcCount = 0;
            
                        var dcdata = new Array(rsBlocks.length);
                        var ecdata = new Array(rsBlocks.length);
            
                        for (var r = 0; r < rsBlocks.length; r += 1) {
            
                            var dcCount = rsBlocks[r].dataCount;
                            var ecCount = rsBlocks[r].totalCount - dcCount;
            
                            maxDcCount = Math.max(maxDcCount, dcCount);
                            maxEcCount = Math.max(maxEcCount, ecCount);
            
                            dcdata[r] = new Array(dcCount);
            
                            for (var i = 0; i < dcdata[r].length; i += 1) {
                                dcdata[r][i] = 0xff & buffer.getBuffer()[i + offset];
                            }
                            offset += dcCount;
            
                            var rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount);
                            var rawPoly = qrPolynomial(dcdata[r], rsPoly.getLength() - 1);
            
                            var modPoly = rawPoly.mod(rsPoly);
                            ecdata[r] = new Array(rsPoly.getLength() - 1);
                            for (var i = 0; i < ecdata[r].length; i += 1) {
                                var modIndex = i + modPoly.getLength() - ecdata[r].length;
                                ecdata[r][i] = (modIndex >= 0) ? modPoly.getAt(modIndex) : 0;
                            }
                        }
            
                        var totalCodeCount = 0;
                        for (var i = 0; i < rsBlocks.length; i += 1) {
                            totalCodeCount += rsBlocks[i].totalCount;
                        }
            
                        var data = new Array(totalCodeCount);
                        var index = 0;
            
                        for (var i = 0; i < maxDcCount; i += 1) {
                            for (var r = 0; r < rsBlocks.length; r += 1) {
                                if (i < dcdata[r].length) {
                                    data[index] = dcdata[r][i];
                                    index += 1;
                                }
                            }
                        }
            
                        for (var i = 0; i < maxEcCount; i += 1) {
                            for (var r = 0; r < rsBlocks.length; r += 1) {
                                if (i < ecdata[r].length) {
                                    data[index] = ecdata[r][i];
                                    index += 1;
                                }
                            }
                        }
            
                        return data;
                    };
                    var createData = function (typeNumber, errorCorrectLevel, dataList) {
            
                        var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectLevel);
            
                        var buffer = qrBitBuffer();
            
                        for (var i = 0; i < dataList.length; i += 1) {
                            var data = dataList[i];
                            buffer.put(data.getMode(), 4);
                            buffer.put(data.getLength(), QRUtil.getLengthInBits(data.getMode(), typeNumber));
                            data.write(buffer);
                        }
            
                        // calc num max data.
                        var totalDataCount = 0;
                        for (var i = 0; i < rsBlocks.length; i += 1) {
                            totalDataCount += rsBlocks[i].dataCount;
                        }
            
                        if (buffer.getLengthInBits() > totalDataCount * 8) {
                            throw new Error('code length overflow. ('
                                + buffer.getLengthInBits()
                                + '>'
                                + totalDataCount * 8
                                + ')');
                        }
            
                        // end code
                        if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {
                            buffer.put(0, 4);
                        }
            
                        // padding
                        while (buffer.getLengthInBits() % 8 != 0) {
                            buffer.putBit(false);
                        }
            
                        // padding
                        while (true) {
            
                            if (buffer.getLengthInBits() >= totalDataCount * 8) {
                                break;
                            }
                            buffer.put(PAD0, 8);
            
                            if (buffer.getLengthInBits() >= totalDataCount * 8) {
                                break;
                            }
                            buffer.put(PAD1, 8);
                        }
            
                        return createBytes(buffer, rsBlocks);
                    };
                    _this.addData = function (data) {
                        var newData = qr8BitByte(data);
                        _dataList.push(newData);
                        _dataCache = null;
                    };
                    _this.isDark = function (row, col) {
                        if (row < 0 || _moduleCount <= row || col < 0 || _moduleCount <= col) {
                            throw new Error(row + ',' + col);
                        }
                        return _modules[row][col];
                    };
                    _this.getModuleCount = function () {
                        return _moduleCount;
                    };
                    _this.make = function () {
                        makeImpl(false, getBestMaskPattern());
                    };
                    _this.createTableTag = function (cellSize, margin) {
            
                        cellSize = cellSize || 2;
                        margin = (typeof margin == 'undefined') ? 'auto' : margin;
            
                        var qrHtml = '';
            
                        qrHtml += '<table style="';
                        qrHtml += ' border-width: 0px; border-style: none;';
                        qrHtml += ' border-collapse: collapse;';
                        qrHtml += ' padding: 0px; margin:' + margin + ';';
                        qrHtml += '">';
                        qrHtml += '<tbody>';
            
                        for (var r = 0; r < _this.getModuleCount(); r += 1) {
            
                            qrHtml += '<tr>';
            
                            for (var c = 0; c < _this.getModuleCount(); c += 1) {
                                qrHtml += '<td style="';
                                qrHtml += ' border-width: 0px; border-style: none;';
                                qrHtml += ' border-collapse: collapse;';
                                qrHtml += ' padding: 0px; margin: 0px;';
                                qrHtml += ' width: ' + cellSize + 'px;';
                                qrHtml += ' height: ' + cellSize + 'px;';
                                qrHtml += ' background-color: ';
                                qrHtml += _this.isDark(r, c) ? '#000000' : '#ffffff';
                                qrHtml += ';';
                                qrHtml += '"/>';
                            }
            
                            qrHtml += '</tr>';
                        }
            
                        qrHtml += '</tbody>';
                        qrHtml += '</table>';
            
                        return qrHtml;
                    };
                    return _this;
                };
                qrcode.stringToBytes = function (s) {
                    var bytes = new Array();
                    for (var i = 0; i < s.length; i += 1) {
                        var c = s.charCodeAt(i);
                        bytes.push(c & 0xff);
                    }
                    return bytes;
                };
                qrcode.createStringToBytes = function (unicodeData, numChars) {
            
                    // create conversion map.
            
                    var unicodeMap = function () {
            
                        var bin = base64DecodeInputStream(unicodeData);
                        var read = function () {
                            var b = bin.read();
                            if (b == -1) throw new Error();
                            return b;
                        };
            
                        var count = 0;
                        var unicodeMap = {};
                        while (true) {
                            var b0 = bin.read();
                            if (b0 == -1) break;
                            var b1 = read();
                            var b2 = read();
                            var b3 = read();
                            var k = String.fromCharCode((b0 << 8) | b1);
                            var v = (b2 << 8) | b3;
                            unicodeMap[k] = v;
                            count += 1;
                        }
                        if (count != numChars) {
                            throw new Error(count + ' != ' + numChars);
                        }
            
                        return unicodeMap;
                    }();
            
                    var unknownChar = '?'.charCodeAt(0);
            
                    return function (s) {
                        var bytes = new Array();
                        for (var i = 0; i < s.length; i += 1) {
                            var c = s.charCodeAt(i);
                            if (c < 128) {
                                bytes.push(c);
                            } else {
                                var b = unicodeMap[s.charAt(i)];
                                if (typeof b == 'number') {
                                    if ((b & 0xff) == b) {
                                        // 1byte
                                        bytes.push(b);
                                    } else {
                                        // 2bytes
                                        bytes.push(b >>> 8);
                                        bytes.push(b & 0xff);
                                    }
                                } else {
                                    bytes.push(unknownChar);
                                }
                            }
                        }
                        return bytes;
                    };
                };
                var QRMode = {
                    MODE_NUMBER: 1 << 0,
                    MODE_ALPHA_NUM: 1 << 1,
                    MODE_8BIT_BYTE: 1 << 2,
                    MODE_KANJI: 1 << 3
                };
                var QRErrorCorrectLevel = {
                    L: 1,
                    M: 0,
                    Q: 3,
                    H: 2
                };
                var QRMaskPattern = {
                    PATTERN000: 0,
                    PATTERN001: 1,
                    PATTERN010: 2,
                    PATTERN011: 3,
                    PATTERN100: 4,
                    PATTERN101: 5,
                    PATTERN110: 6,
                    PATTERN111: 7
                };
                var QRUtil = function () {
            
                    var PATTERN_POSITION_TABLE = [
                        [],
                        [6, 18],
                        [6, 22],
                        [6, 26],
                        [6, 30],
                        [6, 34],
                        [6, 22, 38],
                        [6, 24, 42],
                        [6, 26, 46],
                        [6, 28, 50],
                        [6, 30, 54],
                        [6, 32, 58],
                        [6, 34, 62],
                        [6, 26, 46, 66],
                        [6, 26, 48, 70],
                        [6, 26, 50, 74],
                        [6, 30, 54, 78],
                        [6, 30, 56, 82],
                        [6, 30, 58, 86],
                        [6, 34, 62, 90],
                        [6, 28, 50, 72, 94],
                        [6, 26, 50, 74, 98],
                        [6, 30, 54, 78, 102],
                        [6, 28, 54, 80, 106],
                        [6, 32, 58, 84, 110],
                        [6, 30, 58, 86, 114],
                        [6, 34, 62, 90, 118],
                        [6, 26, 50, 74, 98, 122],
                        [6, 30, 54, 78, 102, 126],
                        [6, 26, 52, 78, 104, 130],
                        [6, 30, 56, 82, 108, 134],
                        [6, 34, 60, 86, 112, 138],
                        [6, 30, 58, 86, 114, 142],
                        [6, 34, 62, 90, 118, 146],
                        [6, 30, 54, 78, 102, 126, 150],
                        [6, 24, 50, 76, 102, 128, 154],
                        [6, 28, 54, 80, 106, 132, 158],
                        [6, 32, 58, 84, 110, 136, 162],
                        [6, 26, 54, 82, 110, 138, 166],
                        [6, 30, 58, 86, 114, 142, 170]
                    ];
                    var G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0);
                    var G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0);
                    var G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1);
            
                    var _this = {};
            
                    var getBCHDigit = function (data) {
                        var digit = 0;
                        while (data != 0) {
                            digit += 1;
                            data >>>= 1;
                        }
                        return digit;
                    };
            
                    _this.getBCHTypeInfo = function (data) {
                        var d = data << 10;
                        while (getBCHDigit(d) - getBCHDigit(G15) >= 0) {
                            d ^= (G15 << (getBCHDigit(d) - getBCHDigit(G15)));
                        }
                        return ((data << 10) | d) ^ G15_MASK;
                    };
            
                    _this.getBCHTypeNumber = function (data) {
                        var d = data << 12;
                        while (getBCHDigit(d) - getBCHDigit(G18) >= 0) {
                            d ^= (G18 << (getBCHDigit(d) - getBCHDigit(G18)));
                        }
                        return (data << 12) | d;
                    };
            
                    _this.getPatternPosition = function (typeNumber) {
                        return PATTERN_POSITION_TABLE[typeNumber - 1];
                    };
            
                    _this.getMaskFunction = function (maskPattern) {
            
                        switch (maskPattern) {
            
                            case QRMaskPattern.PATTERN000:
                                return function (i, j) { return (i + j) % 2 == 0; };
                            case QRMaskPattern.PATTERN001:
                                return function (i, j) { return i % 2 == 0; };
                            case QRMaskPattern.PATTERN010:
                                return function (i, j) { return j % 3 == 0; };
                            case QRMaskPattern.PATTERN011:
                                return function (i, j) { return (i + j) % 3 == 0; };
                            case QRMaskPattern.PATTERN100:
                                return function (i, j) { return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 == 0; };
                            case QRMaskPattern.PATTERN101:
                                return function (i, j) { return (i * j) % 2 + (i * j) % 3 == 0; };
                            case QRMaskPattern.PATTERN110:
                                return function (i, j) { return ((i * j) % 2 + (i * j) % 3) % 2 == 0; };
                            case QRMaskPattern.PATTERN111:
                                return function (i, j) { return ((i * j) % 3 + (i + j) % 2) % 2 == 0; };
            
                            default:
                                throw new Error('bad maskPattern:' + maskPattern);
                        }
                    };
            
                    _this.getErrorCorrectPolynomial = function (errorCorrectLength) {
                        var a = qrPolynomial([1], 0);
                        for (var i = 0; i < errorCorrectLength; i += 1) {
                            a = a.multiply(qrPolynomial([1, QRMath.gexp(i)], 0));
                        }
                        return a;
                    };
            
                    _this.getLengthInBits = function (mode, type) {
            
                        if (1 <= type && type < 10) {
            
                            // 1 - 9
            
                            switch (mode) {
                                case QRMode.MODE_NUMBER: return 10;
                                case QRMode.MODE_ALPHA_NUM: return 9;
                                case QRMode.MODE_8BIT_BYTE: return 8;
                                case QRMode.MODE_KANJI: return 8;
                                default:
                                    throw new Error('mode:' + mode);
                            }
            
                        } else if (type < 27) {
            
                            // 10 - 26
            
                            switch (mode) {
                                case QRMode.MODE_NUMBER: return 12;
                                case QRMode.MODE_ALPHA_NUM: return 11;
                                case QRMode.MODE_8BIT_BYTE: return 16;
                                case QRMode.MODE_KANJI: return 10;
                                default:
                                    throw new Error('mode:' + mode);
                            }
            
                        } else if (type < 41) {
            
                            // 27 - 40
            
                            switch (mode) {
                                case QRMode.MODE_NUMBER: return 14;
                                case QRMode.MODE_ALPHA_NUM: return 13;
                                case QRMode.MODE_8BIT_BYTE: return 16;
                                case QRMode.MODE_KANJI: return 12;
                                default:
                                    throw new Error('mode:' + mode);
                            }
            
                        } else {
                            throw new Error('type:' + type);
                        }
                    };
            
                    _this.getLostPoint = function (qrcode) {
            
                        var moduleCount = qrcode.getModuleCount();
            
                        var lostPoint = 0;
            
                        // LEVEL1
            
                        for (var row = 0; row < moduleCount; row += 1) {
                            for (var col = 0; col < moduleCount; col += 1) {
            
                                var sameCount = 0;
                                var dark = qrcode.isDark(row, col);
            
                                for (var r = -1; r <= 1; r += 1) {
            
                                    if (row + r < 0 || moduleCount <= row + r) {
                                        continue;
                                    }
            
                                    for (var c = -1; c <= 1; c += 1) {
            
                                        if (col + c < 0 || moduleCount <= col + c) {
                                            continue;
                                        }
            
                                        if (r == 0 && c == 0) {
                                            continue;
                                        }
            
                                        if (dark == qrcode.isDark(row + r, col + c)) {
                                            sameCount += 1;
                                        }
                                    }
                                }
            
                                if (sameCount > 5) {
                                    lostPoint += (3 + sameCount - 5);
                                }
                            }
                        };
            
                        // LEVEL2
            
                        for (var row = 0; row < moduleCount - 1; row += 1) {
                            for (var col = 0; col < moduleCount - 1; col += 1) {
                                var count = 0;
                                if (qrcode.isDark(row, col)) count += 1;
                                if (qrcode.isDark(row + 1, col)) count += 1;
                                if (qrcode.isDark(row, col + 1)) count += 1;
                                if (qrcode.isDark(row + 1, col + 1)) count += 1;
                                if (count == 0 || count == 4) {
                                    lostPoint += 3;
                                }
                            }
                        }
            
                        // LEVEL3
            
                        for (var row = 0; row < moduleCount; row += 1) {
                            for (var col = 0; col < moduleCount - 6; col += 1) {
                                if (qrcode.isDark(row, col)
                                    && !qrcode.isDark(row, col + 1)
                                    && qrcode.isDark(row, col + 2)
                                    && qrcode.isDark(row, col + 3)
                                    && qrcode.isDark(row, col + 4)
                                    && !qrcode.isDark(row, col + 5)
                                    && qrcode.isDark(row, col + 6)) {
                                    lostPoint += 40;
                                }
                            }
                        }
            
                        for (var col = 0; col < moduleCount; col += 1) {
                            for (var row = 0; row < moduleCount - 6; row += 1) {
                                if (qrcode.isDark(row, col)
                                    && !qrcode.isDark(row + 1, col)
                                    && qrcode.isDark(row + 2, col)
                                    && qrcode.isDark(row + 3, col)
                                    && qrcode.isDark(row + 4, col)
                                    && !qrcode.isDark(row + 5, col)
                                    && qrcode.isDark(row + 6, col)) {
                                    lostPoint += 40;
                                }
                            }
                        }
            
                        // LEVEL4
            
                        var darkCount = 0;
            
                        for (var col = 0; col < moduleCount; col += 1) {
                            for (var row = 0; row < moduleCount; row += 1) {
                                if (qrcode.isDark(row, col)) {
                                    darkCount += 1;
                                }
                            }
                        }
            
                        var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5;
                        lostPoint += ratio * 10;
            
                        return lostPoint;
                    };
            
                    return _this;
                }();
                var QRMath = function () {
            
                    var EXP_TABLE = new Array(256);
                    var LOG_TABLE = new Array(256);
            
                    // initialize tables
                    for (var i = 0; i < 8; i += 1) {
                        EXP_TABLE[i] = 1 << i;
                    }
                    for (var i = 8; i < 256; i += 1) {
                        EXP_TABLE[i] = EXP_TABLE[i - 4]
                            ^ EXP_TABLE[i - 5]
                            ^ EXP_TABLE[i - 6]
                            ^ EXP_TABLE[i - 8];
                    }
                    for (var i = 0; i < 255; i += 1) {
                        LOG_TABLE[EXP_TABLE[i]] = i;
                    }
            
                    var _this = {};
            
                    _this.glog = function (n) {
            
                        if (n < 1) {
                            throw new Error('glog(' + n + ')');
                        }
            
                        return LOG_TABLE[n];
                    };
            
                    _this.gexp = function (n) {
            
                        while (n < 0) {
                            n += 255;
                        }
            
                        while (n >= 256) {
                            n -= 255;
                        }
            
                        return EXP_TABLE[n];
                    };
            
                    return _this;
                }();
                function qrPolynomial(num, shift) {
            
                    if (typeof num.length == 'undefined') {
                        throw new Error(num.length + '/' + shift);
                    }
            
                    var _num = function () {
                        var offset = 0;
                        while (offset < num.length && num[offset] == 0) {
                            offset += 1;
                        }
                        var _num = new Array(num.length - offset + shift);
                        for (var i = 0; i < num.length - offset; i += 1) {
                            _num[i] = num[i + offset];
                        }
                        return _num;
                    }();
            
                    var _this = {};
            
                    _this.getAt = function (index) {
                        return _num[index];
                    };
            
                    _this.getLength = function () {
                        return _num.length;
                    };
            
                    _this.multiply = function (e) {
            
                        var num = new Array(_this.getLength() + e.getLength() - 1);
            
                        for (var i = 0; i < _this.getLength(); i += 1) {
                            for (var j = 0; j < e.getLength(); j += 1) {
                                num[i + j] ^= QRMath.gexp(QRMath.glog(_this.getAt(i)) + QRMath.glog(e.getAt(j)));
                            }
                        }
            
                        return qrPolynomial(num, 0);
                    };
            
                    _this.mod = function (e) {
            
                        if (_this.getLength() - e.getLength() < 0) {
                            return _this;
                        }
            
                        var ratio = QRMath.glog(_this.getAt(0)) - QRMath.glog(e.getAt(0));
            
                        var num = new Array(_this.getLength());
                        for (var i = 0; i < _this.getLength(); i += 1) {
                            num[i] = _this.getAt(i);
                        }
            
                        for (var i = 0; i < e.getLength(); i += 1) {
                            num[i] ^= QRMath.gexp(QRMath.glog(e.getAt(i)) + ratio);
                        }
            
                        // recursive call
                        return qrPolynomial(num, 0).mod(e);
                    };
            
                    return _this;
                };
                var QRRSBlock = function () {
            
                    var RS_BLOCK_TABLE = [
            
                        // L
                        // M
                        // Q
                        // H
            
                        // 1
                        [1, 26, 19],
                        [1, 26, 16],
                        [1, 26, 13],
                        [1, 26, 9],
            
                        // 2
                        [1, 44, 34],
                        [1, 44, 28],
                        [1, 44, 22],
                        [1, 44, 16],
            
                        // 3
                        [1, 70, 55],
                        [1, 70, 44],
                        [2, 35, 17],
                        [2, 35, 13],
            
                        // 4
                        [1, 100, 80],
                        [2, 50, 32],
                        [2, 50, 24],
                        [4, 25, 9],
            
                        // 5
                        [1, 134, 108],
                        [2, 67, 43],
                        [2, 33, 15, 2, 34, 16],
                        [2, 33, 11, 2, 34, 12],
            
                        // 6
                        [2, 86, 68],
                        [4, 43, 27],
                        [4, 43, 19],
                        [4, 43, 15],
            
                        // 7
                        [2, 98, 78],
                        [4, 49, 31],
                        [2, 32, 14, 4, 33, 15],
                        [4, 39, 13, 1, 40, 14],
            
                        // 8
                        [2, 121, 97],
                        [2, 60, 38, 2, 61, 39],
                        [4, 40, 18, 2, 41, 19],
                        [4, 40, 14, 2, 41, 15],
            
                        // 9
                        [2, 146, 116],
                        [3, 58, 36, 2, 59, 37],
                        [4, 36, 16, 4, 37, 17],
                        [4, 36, 12, 4, 37, 13],
            
                        // 10
                        [2, 86, 68, 2, 87, 69],
                        [4, 69, 43, 1, 70, 44],
                        [6, 43, 19, 2, 44, 20],
                        [6, 43, 15, 2, 44, 16],
            
                        // 11
                        [4, 101, 81],
                        [1, 80, 50, 4, 81, 51],
                        [4, 50, 22, 4, 51, 23],
                        [3, 36, 12, 8, 37, 13],
            
                        // 12
                        [2, 116, 92, 2, 117, 93],
                        [6, 58, 36, 2, 59, 37],
                        [4, 46, 20, 6, 47, 21],
                        [7, 42, 14, 4, 43, 15],
            
                        // 13
                        [4, 133, 107],
                        [8, 59, 37, 1, 60, 38],
                        [8, 44, 20, 4, 45, 21],
                        [12, 33, 11, 4, 34, 12],
            
                        // 14
                        [3, 145, 115, 1, 146, 116],
                        [4, 64, 40, 5, 65, 41],
                        [11, 36, 16, 5, 37, 17],
                        [11, 36, 12, 5, 37, 13],
            
                        // 15
                        [5, 109, 87, 1, 110, 88],
                        [5, 65, 41, 5, 66, 42],
                        [5, 54, 24, 7, 55, 25],
                        [11, 36, 12, 7, 37, 13],
            
                        // 16
                        [5, 122, 98, 1, 123, 99],
                        [7, 73, 45, 3, 74, 46],
                        [15, 43, 19, 2, 44, 20],
                        [3, 45, 15, 13, 46, 16],
            
                        // 17
                        [1, 135, 107, 5, 136, 108],
                        [10, 74, 46, 1, 75, 47],
                        [1, 50, 22, 15, 51, 23],
                        [2, 42, 14, 17, 43, 15],
            
                        // 18
                        [5, 150, 120, 1, 151, 121],
                        [9, 69, 43, 4, 70, 44],
                        [17, 50, 22, 1, 51, 23],
                        [2, 42, 14, 19, 43, 15],
            
                        // 19
                        [3, 141, 113, 4, 142, 114],
                        [3, 70, 44, 11, 71, 45],
                        [17, 47, 21, 4, 48, 22],
                        [9, 39, 13, 16, 40, 14],
            
                        // 20
                        [3, 135, 107, 5, 136, 108],
                        [3, 67, 41, 13, 68, 42],
                        [15, 54, 24, 5, 55, 25],
                        [15, 43, 15, 10, 44, 16],
            
                        // 21
                        [4, 144, 116, 4, 145, 117],
                        [17, 68, 42],
                        [17, 50, 22, 6, 51, 23],
                        [19, 46, 16, 6, 47, 17],
            
                        // 22
                        [2, 139, 111, 7, 140, 112],
                        [17, 74, 46],
                        [7, 54, 24, 16, 55, 25],
                        [34, 37, 13],
            
                        // 23
                        [4, 151, 121, 5, 152, 122],
                        [4, 75, 47, 14, 76, 48],
                        [11, 54, 24, 14, 55, 25],
                        [16, 45, 15, 14, 46, 16],
            
                        // 24
                        [6, 147, 117, 4, 148, 118],
                        [6, 73, 45, 14, 74, 46],
                        [11, 54, 24, 16, 55, 25],
                        [30, 46, 16, 2, 47, 17],
            
                        // 25
                        [8, 132, 106, 4, 133, 107],
                        [8, 75, 47, 13, 76, 48],
                        [7, 54, 24, 22, 55, 25],
                        [22, 45, 15, 13, 46, 16],
            
                        // 26
                        [10, 142, 114, 2, 143, 115],
                        [19, 74, 46, 4, 75, 47],
                        [28, 50, 22, 6, 51, 23],
                        [33, 46, 16, 4, 47, 17],
            
                        // 27
                        [8, 152, 122, 4, 153, 123],
                        [22, 73, 45, 3, 74, 46],
                        [8, 53, 23, 26, 54, 24],
                        [12, 45, 15, 28, 46, 16],
            
                        // 28
                        [3, 147, 117, 10, 148, 118],
                        [3, 73, 45, 23, 74, 46],
                        [4, 54, 24, 31, 55, 25],
                        [11, 45, 15, 31, 46, 16],
            
                        // 29
                        [7, 146, 116, 7, 147, 117],
                        [21, 73, 45, 7, 74, 46],
                        [1, 53, 23, 37, 54, 24],
                        [19, 45, 15, 26, 46, 16],
            
                        // 30
                        [5, 145, 115, 10, 146, 116],
                        [19, 75, 47, 10, 76, 48],
                        [15, 54, 24, 25, 55, 25],
                        [23, 45, 15, 25, 46, 16],
            
                        // 31
                        [13, 145, 115, 3, 146, 116],
                        [2, 74, 46, 29, 75, 47],
                        [42, 54, 24, 1, 55, 25],
                        [23, 45, 15, 28, 46, 16],
            
                        // 32
                        [17, 145, 115],
                        [10, 74, 46, 23, 75, 47],
                        [10, 54, 24, 35, 55, 25],
                        [19, 45, 15, 35, 46, 16],
            
                        // 33
                        [17, 145, 115, 1, 146, 116],
                        [14, 74, 46, 21, 75, 47],
                        [29, 54, 24, 19, 55, 25],
                        [11, 45, 15, 46, 46, 16],
            
                        // 34
                        [13, 145, 115, 6, 146, 116],
                        [14, 74, 46, 23, 75, 47],
                        [44, 54, 24, 7, 55, 25],
                        [59, 46, 16, 1, 47, 17],
            
                        // 35
                        [12, 151, 121, 7, 152, 122],
                        [12, 75, 47, 26, 76, 48],
                        [39, 54, 24, 14, 55, 25],
                        [22, 45, 15, 41, 46, 16],
            
                        // 36
                        [6, 151, 121, 14, 152, 122],
                        [6, 75, 47, 34, 76, 48],
                        [46, 54, 24, 10, 55, 25],
                        [2, 45, 15, 64, 46, 16],
            
                        // 37
                        [17, 152, 122, 4, 153, 123],
                        [29, 74, 46, 14, 75, 47],
                        [49, 54, 24, 10, 55, 25],
                        [24, 45, 15, 46, 46, 16],
            
                        // 38
                        [4, 152, 122, 18, 153, 123],
                        [13, 74, 46, 32, 75, 47],
                        [48, 54, 24, 14, 55, 25],
                        [42, 45, 15, 32, 46, 16],
            
                        // 39
                        [20, 147, 117, 4, 148, 118],
                        [40, 75, 47, 7, 76, 48],
                        [43, 54, 24, 22, 55, 25],
                        [10, 45, 15, 67, 46, 16],
            
                        // 40
                        [19, 148, 118, 6, 149, 119],
                        [18, 75, 47, 31, 76, 48],
                        [34, 54, 24, 34, 55, 25],
                        [20, 45, 15, 61, 46, 16]
                    ];
            
                    var qrRSBlock = function (totalCount, dataCount) {
                        var _this = {};
                        _this.totalCount = totalCount;
                        _this.dataCount = dataCount;
                        return _this;
                    };
            
                    var _this = {};
            
                    var getRsBlockTable = function (typeNumber, errorCorrectLevel) {
            
                        switch (errorCorrectLevel) {
                            case QRErrorCorrectLevel.L:
                                return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];
                            case QRErrorCorrectLevel.M:
                                return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];
                            case QRErrorCorrectLevel.Q:
                                return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];
                            case QRErrorCorrectLevel.H:
                                return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];
                            default:
                                return undefined;
                        }
                    };
            
                    _this.getRSBlocks = function (typeNumber, errorCorrectLevel) {
            
                        var rsBlock = getRsBlockTable(typeNumber, errorCorrectLevel);
            
                        if (typeof rsBlock == 'undefined') {
                            throw new Error('bad rs block @ typeNumber:' + typeNumber +
                                '/errorCorrectLevel:' + errorCorrectLevel);
                        }
            
                        var length = rsBlock.length / 3;
            
                        var list = new Array();
            
                        for (var i = 0; i < length; i += 1) {
            
                            var count = rsBlock[i * 3 + 0];
                            var totalCount = rsBlock[i * 3 + 1];
                            var dataCount = rsBlock[i * 3 + 2];
            
                            for (var j = 0; j < count; j += 1) {
                                list.push(qrRSBlock(totalCount, dataCount));
                            }
                        }
            
                        return list;
                    };
            
                    return _this;
                }();
                var qrBitBuffer = function () {
            
                    var _buffer = new Array();
                    var _length = 0;
            
                    var _this = {};
            
                    _this.getBuffer = function () {
                        return _buffer;
                    };
            
                    _this.getAt = function (index) {
                        var bufIndex = Math.floor(index / 8);
                        return ((_buffer[bufIndex] >>> (7 - index % 8)) & 1) == 1;
                    };
            
                    _this.put = function (num, length) {
                        for (var i = 0; i < length; i += 1) {
                            _this.putBit(((num >>> (length - i - 1)) & 1) == 1);
                        }
                    };
            
                    _this.getLengthInBits = function () {
                        return _length;
                    };
            
                    _this.putBit = function (bit) {
            
                        var bufIndex = Math.floor(_length / 8);
                        if (_buffer.length <= bufIndex) {
                            _buffer.push(0);
                        }
            
                        if (bit) {
                            _buffer[bufIndex] |= (0x80 >>> (_length % 8));
                        }
            
                        _length += 1;
                    };
            
                    return _this;
                };
                var qr8BitByte = function (data) {
            
                    var _mode = QRMode.MODE_8BIT_BYTE;
                    var _data = data;
                    var _bytes = qrcode.stringToBytes(data);
            
                    var _this = {};
            
                    _this.getMode = function () {
                        return _mode;
                    };
            
                    _this.getLength = function (buffer) {
                        return _bytes.length;
                    };
            
                    _this.write = function (buffer) {
                        for (var i = 0; i < _bytes.length; i += 1) {
                            buffer.put(_bytes[i], 8);
                        }
                    };
            
                    return _this;
                };
                var base64DecodeInputStream = function (str) {
            
                    var _str = str;
                    var _pos = 0;
                    var _buffer = 0;
                    var _buflen = 0;
            
                    var _this = {};
            
                    _this.read = function () {
            
                        while (_buflen < 8) {
            
                            if (_pos >= _str.length) {
                                if (_buflen == 0) {
                                    return -1;
                                }
                                throw new Error('unexpected end of file./' + _buflen);
                            }
            
                            var c = _str.charAt(_pos);
                            _pos += 1;
            
                            if (c == '=') {
                                _buflen = 0;
                                return -1;
                            } else if (c.match(/^\s$/)) {
                                // ignore if whitespace.
                                continue;
                            }
            
                            _buffer = (_buffer << 6) | decode(c.charCodeAt(0));
                            _buflen += 6;
                        }
            
                        var n = (_buffer >>> (_buflen - 8)) & 0xff;
                        _buflen -= 8;
                        return n;
                    };
            
                    var decode = function (c) {
                        if (0x41 <= c && c <= 0x5a) {
                            return c - 0x41;
                        } else if (0x61 <= c && c <= 0x7a) {
                            return c - 0x61 + 26;
                        } else if (0x30 <= c && c <= 0x39) {
                            return c - 0x30 + 52;
                        } else if (c == 0x2b) {
                            return 62;
                        } else if (c == 0x2f) {
                            return 63;
                        } else {
                            throw new Error('c:' + c);
                        }
                    };
            
                    return _this;
                };
                return qrcode;
            }();
            //二维码生成器end

            //显示微信二维码
            var weixinDiv = false;
            var showWeixin = function () {
                createWeixin();
                weixinDiv.style.display = 'block';
                weixinDiv.style.left = document.body.clientWidth > weixinDiv.offsetWidth ? (document.body.scrollLeft + ((document.body.clientWidth - weixinDiv.offsetWidth) / 2)) + 'px' : 0 + 'px'; 
            };

            //创建微信二维码容器
            var createWeixin = function () {
                if (weixinDiv) {
                    weixin_popup_main = document.getElementById('jjy_share_weixin_popup_main')
                    weixin_popup_main.innerHTML = create_qrcode(config.url, 21, 'L');
                    return;
                };
 
                weixinDiv = document.createElement('div');
                document.body.insertBefore(weixinDiv, document.body.firstChild);
                weixinDiv.id = 'jjy_share_weixin_qrcode';
                weixinDiv.className = 'jjy_share_weixin_popup';
                weixinDiv.style.display = 'none';
                var weixin_popup_head = '<div class="jjy_share_weixin_popup_head">'+
                '<span>分享到微信朋友圈</span>'+
                '<a class="jjy_share_weixin_popup_close" id="weixin_close" onclick="document.getElementById(\'jjy_share_weixin_qrcode\').style.display = \'none\';return false;" href="#">×</a> </div>';
                var weixin_popup_foot = '<div class="jjy_share_weixin_popup_foot">打开微信，使用“扫一扫”即可将网页分享至朋友圈。 </div>';
                var weixin_popup_main = document.createElement('div');
                weixin_popup_main.className = 'jjy_share_weixin_popup_main';
                weixin_popup_main.id = 'jjy_share_weixin_popup_main'
                weixin_popup_main.innerHTML = create_qrcode(config.url, 21, 'L');
                weixinDiv.innerHTML = weixin_popup_head + weixin_popup_foot;
                weixinDiv.insertBefore(weixin_popup_main, weixinDiv.lastChild);
            };
             
            //创建二维码
            var create_qrcode = function (text, typeNumber, errorCorrectLevel, table) {
                var qr = qrcode(typeNumber || 21, errorCorrectLevel || 'L');
                qr.addData(text);
                qr.make();
                return qr.createTableTag();
            };


        }
    }
}